// 导入之前写好的三个API请求方法
// 这里假设 `getDayData`、`getMonthData` 和 `getYearData` 是已经定义好的函数，
// 分别用于向不同的接口发起请求，获取按天、按月、按年维度的数据。
// 它们应该接收对应的参数（此处 `date` 大概率是表示具体的日期相关信息，根据不同的请求函数具体含义可能不同），
// 并且返回一个 `Promise`，以便可以使用 `await` 来获取异步请求后的结果。
import { getDayData, getMonthData, getYearData } from './request';

// 导入普通年月日改成中文年月日
import { formatCnDate } from '@/libs/utils';

// 定义一个名为 `getData` 的异步函数，用于根据指定的字段（表示数据的时间维度，如天、月、年）和日期信息来获取相应的数据。
// `field` 参数用于指定获取数据的时间维度类型，比如 'day' 表示按天获取数据，'month' 表示按月获取，'year' 表示按年获取。
// `date` 参数则根据不同的 `field` 值传递相应合适的日期相关参数，例如如果 `field` 是 'day'，`date` 可能是具体的某一天的日期格式；如果是 'month'，可能是具体的月份相关格式等。
// 使用async/await 来处理异步操作，确保函数返回的是一个 `Promise`，而不是直接返回数据。
const getData = async (store,field, date) => {
    // 初始化一个变量 `data`，用于存储获取到的数据，初始值设为 `null`。
    let data = null;
    // 使用 `switch` 语句根据 `field` 的不同值来决定调用哪个 API 请求方法获取数据。
    switch (field) {
        // 如果 `field` 的值为 'day'，则调用 `getDayData` 函数发起按天数据的请求，
        // 并使用 `await` 等待异步请求完成，将返回的数据赋值给 `data` 变量。
        case 'day':
            data = await getDayData(date);
            break;
        // 如果 `field` 的值为 'month'，则调用 `getMonthData` 函数发起按月数据的请求，
        // 同样使用 `await` 等待异步请求完成后，将返回的数据赋值给 `data` 变量。
        case 'month':
            data = await getMonthData(date);
            break;
        // 如果 `field` 的值为 'year'，则调用 `getYearData` 函数发起按年数据的请求，
        // 等待异步请求结束，把返回的数据赋给 `data` 变量。
        case 'year':
            data = await getYearData(date);
            break;
    }
    // 在获取到相应数据后，将数据打印到控制台，方便调试查看获取到的数据内容是否符合预期。
    // console.log(data);
    
    // 使用store的commit方法，将获取到的code和data传递给mutations中的setData方法，将数据存储到state中，以便后续使用
    store.commit('setErrorCode', data.error_code);
    // 判断是否存在错误
    if (data.error_code!== 0) {
        // 如果不等于0，说明存在错误，不再做其他操作，直接返回
        return
    }

    // 对日期格式进行处理
    let res = null;
    switch (field) {
        case 'day':
            res = data.result.data
            res.date = formatCnDate(
                'day',
                res.date
            );
            res['year-month'] = formatCnDate(
                'month',
                res['year-month']
            );
            break;
        case 'month':
            res = data.result.data.holiday_array;
            res.forEach((item) => {
                item.festival = formatCnDate(
                    'day',
                    item.festival
                );
            });            
            break;
        case 'year':
            res = data.result.data.holiday_list;
            console.log('数据处理后：');
            console.log(res);
            res.forEach((item) => {
                item.startday = formatCnDate(
                    'day',
                    item.startday
                );
            });
            break;
    }
    console.log('数据处理后：');
    
    console.log(res);
    
    // 如果请求成功，通过 `commit` 方法将获取到的数据 `data` 提交给 `setData` 方法，
    store.commit('setData', {
        field,
        data: res
    });
};

// 将 `getData` 函数作为模块的默认导出，以便在其他模块中可以引入并使用这个函数来获取不同维度的数据。
export default getData;